package main

import (
	"fmt"
)

//

func main() {
	//定义数组
	name := [...]int{1, 2, 3, 4, 5} //固定长度为5
	//或者 name := [2]string{"lynzhang","liuwei"}
	//或者 var name [2]string，此时两个元素初始值都是“”
	fmt.Println(name[0:])  //[1,2,3,4,5]
	fmt.Println(name[1:])  //[2,3,4,5]
	fmt.Println(name[0:2]) //[1,2]
	fmt.Println(name[2:])  //取第二个之后的所有元素(不包括第二个)
	fmt.Println(name[:4])  //取前4个
	fmt.Println(name[3:5]) //[4,5]

	//定义切片，初始长度为1，容量为2
	s := make([]int, 1, 2)
	fmt.Println(s) //[0]，make创建后会自动赋值
	// 或者 s := []int{1,2,3,4} 只要[]里没有定义长度，那就是切片，否则就是数组
	s = append(s, []int{1, 2, 3, 4}...)
	s[1] = 11 //改变下标为1的元素的值
	fmt.Println(s)

	//修改元素，2种场景下的修改，和python的执行结果一样
	data := [][]int{[]int{1, 2, 3}, []int{4, 5, 6}}
	fmt.Println(data)
	for _, v := range data {
		for idx, vv := range v {
			vv += 2
			v[idx] = vv
		}
		fmt.Println(v)
		//data[index] = v
	}

	fmt.Println(data)

	name2 := []int{1, 2, 3}
	for _, v := range name2 {
		v += 2
	}
	fmt.Println(name2)

	// nil
	var name3 []string
	name3 = nil
	fmt.Println(len(name3), name3)

}
